package com.xxgc.helloword.aop;

import com.xxgc.helloword.po.Info;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.Date;

//对象交给spring管理
@Component
//是一个切面类
@Aspect
//日志框架
@Slf4j
@PropertySource(value = "classpath:system.properties")
public class InfoAop {
    @Value("${system.version}")
    private String version;
    //spring IOC AOP
    //AOP的使用场景 不修改代码的情况下 实现方法的增强
    //切面方法 切点表达式 环绕增强
    @Around("execution(* com.xxgc.helloword.controller.*.*(..))")
    public Object doAfterReturning(ProceedingJoinPoint pjp) throws Throwable {
        //方法名
        String methodName = pjp.getSignature().getName();
        //执行目标方法
        Info result = (Info)pjp.proceed();

        //通过切面添加返回时间
        result.setResponseDate(new Date());
        //通过切面添加当前版本号
        result.setVersion(version);
        log.info("切面获取的请求返回了");
        log.info(result.toString());

        return result;
    }
}
